| Mirage Source http://web.miragesource.net/forums/ |
|
| Two Handed Weapon http://web.miragesource.net/forums/viewtopic.php?f=201&t=3764 |
Page 1 of 1 |
| Author: | Shadow Dragon [ Sun May 25, 2008 6:15 pm ] |
| Post subject: | Two Handed Weapon |
Ok now I have been looking at this tutorial for some time and I can't figure out exactly what it does could someone help me? Code: Originally posted by Dark Echo
Two Handed Weapons This is basically what the name saids. I did not create a whole new item type, i just used the old item type and added an option to make weapons two handed or not, by just ticking a checkbox. So thats basically it. If you have any items, when you add this in you will have to remake all your items again, so yeah.. Also, back up your source before you add in this tutorial, just to be safe. - Tutorial updated.. - Fixed small shield bug Difficult: 1/5 Part 1 - Server Side Ok, go into modTypes and find: Type ItemRec Add under Data3 As Integer: TwoHanded As Byte Alright, now go into modDatabase and find: Sub SaveItem(ByVal ItemNum As Long) Now add this to the end of the saving sub, but before the End Sub: Call PutVar(FileName, "ITEM" & ItemNum, "TwoHanded", Trim(Item(ItemNum).TwoHanded)) Ok, now find: Sub LoadItems() And after: Item(i).Data3 = Val(GetVar(FileName, "ITEM" & i, "Data3")) Add: Item(i).TwoHanded = Val(GetVar(FileName, "ITEM" & i, "TwoHanded")) Alrighty, we're nearly done for server side. go into modHandleData and find: If LCase(Parse(0)) = "useitem" Then And find: Case ITEM_TYPE_WEAPON And make it look like this: Case ITEM_TYPE_WEAPON If InvNum <> GetPlayerWeaponSlot(Index) Then If Item(GetPlayerInvItemNum(Index, InvNum)).TwoHanded < 1 Then If Int(GetPlayerSTR(Index)) < n Then Call PlayerMsg(Index, "Your strength is to low to hold this weapon! Required STR (" & n * 2 & ")", BrightRed) Exit Sub End If Call SetPlayerWeaponSlot(Index, InvNum) Else If GetPlayerShieldSlot(Index) = 0 Then Call SetPlayerWeaponSlot(Index, InvNum) Call SetPlayerShieldSlot(Index, InvNum) Else Call PlayerMsg(Index, "You already have a shield equiped!", BrightRed) End If End If Else Call SetPlayerWeaponSlot(Index, 0) End If Call SendWornEquipment(Index) Right under that, you will find the Shield sectin of that sub.. Now just change it so it looks like this one: Case ITEM_TYPE_SHIELD If GetPlayerShieldSlot(Index) > 0 Then If GetPlayerWeaponSlot(Index) = GetPlayerShieldSlot(Index) Then Call PlayerMsg(Index, "You have a two handed weapon equipped! Please unequip it before using your shield!", BrightRed) Exit Sub Else Call PlayerMsg(Index, "You already have a shield equipped! Please unequip it before using your shield!", BrightRed) End If Else If InvNum <> GetPlayerShieldSlot(Index) Then Call SetPlayerShieldSlot(Index, InvNum) Else Call SetPlayerShieldSlot(Index, 0) End If Call SendWornEquipment(Index) End If Now find: If LCase(Parse(0)) = "saveitem" Then And add this to the end of the update item section: Item(n).TwoHanded = Val(Parse(8)) So that section looks like this: ' Update the item Item(n).Name = Parse(2) Item(n).Pic = Val(Parse(3)) Item(n).Type = Val(Parse(4)) Item(n).Data1 = Val(Parse(5)) Item(n).Data2 = Val(Parse(6)) Item(n).Data3 = Val(Parse(7)) Item(n).TwoHanded = Val(Parse(8)) Go into modGameLogic, remember this is all server side for now.. And find: Sub PlayerMapDropItem(ByVal Index As Long, ByVal InvNum As Long, ByVal Ammount As Long) Now, look for: Case ITEM_TYPE_WEAPON And make that whole case look like this: Case ITEM_TYPE_WEAPON If Item(GetPlayerInvItemNum(Index, InvNum)).TwoHanded < 1 Then If InvNum = GetPlayerWeaponSlot(Index) Then Call SetPlayerWeaponSlot(Index, 0) Call SendWornEquipment(Index) End If MapItem(GetPlayerMap(Index), i).Dur = GetPlayerInvItemDur(Index, InvNum) Else If InvNum = GetPlayerWeaponSlot(Index) And InvNum = GetPlayerShieldSlot(Index) Then Call SetPlayerWeaponSlot(Index, 0) Call SetPlayerShieldSlot(Index, 0) Call SendWornEquipment(Index) End If MapItem(GetPlayerMap(Index), i).Dur = GetPlayerInvItemDur(Index, InvNum) End If Woohoo, so close, just a few more lines. :) Alrighty, go into modServerTCP and find: Sub SendUpdateItemToAll(ByVal ItemNum As Long) And make the packet look like this: Packet = "UPDATEITEM" & SEP_CHAR & ItemNum & SEP_CHAR & Trim(Item(ItemNum).Name) & SEP_CHAR & Item(ItemNum).Pic & SEP_CHAR & Item(ItemNum).Type & SEP_CHAR & Item(ItemNum).Data1 & SEP_CHAR & Item(ItemNum).Data2 & SEP_CHAR & Item(ItemNum).Data3 & SEP_CHAR & Item(ItemNum).TwoHanded & SEP_CHAR & END_CHAR Last sub, woot!! Find: Sub SendEditItemTo(ByVal Index As Long, ByVal ItemNum As Long) And make that last packet look like this: Packet = "EDITITEM" & SEP_CHAR & ItemNum & SEP_CHAR & Trim(Item(ItemNum).Name) & SEP_CHAR & Item(ItemNum).Pic & SEP_CHAR & Item(ItemNum).Type & SEP_CHAR & Item(ItemNum).Data1 & SEP_CHAR & Item(ItemNum).Data2 & SEP_CHAR & Item(ItemNum).Data3 & SEP_CHAR & Item(ItemNum).TwoHanded & SEP_CHAR & END_CHAR And thats it for the server side.. Part 2 - Client Side Ok, go into modTypes and find: Type ItemRec Add under Data3 As Integer: TwoHanded As Byte Alright, now go into modClientTCP and find: Public Sub SendSaveItem(ByVal ItemNum As Long) Add this to the end of your packet: .TwoHanded & SEP_CHAR & If you've done this correctly, it should look like this: Packet = "SAVEITEM" & SEP_CHAR & ItemNum & SEP_CHAR & Trim(.Name) & SEP_CHAR & .Pic & SEP_CHAR & .Type & SEP_CHAR & .Data1 & SEP_CHAR & .Data2 & SEP_CHAR & .Data3 & SEP_CHAR & .TwoHanded & SEP_CHAR & END_CHAR You now have to add a checkbox in the equipment frame, in the items editor. Call it chkTwoHanded and your set. Now, go into modGameLogic and find: Public Sub ItemEditorOk() Now at the bottom of: If (frmItemEditor.cmbType.ListIndex >= ITEM_TYPE_POTIONADDHP) And (frmItemEditor.cmbType.ListIndex <= ITEM_TYPE_POTIONSUBSP) Then And: If (frmItemEditor.cmbType.ListIndex = ITEM_TYPE_SPELL) Then Add: Item(EditorIndex).TwoHanded = 0 So they both should look like this: If (frmItemEditor.cmbType.ListIndex >= ITEM_TYPE_POTIONADDHP) And (frmItemEditor.cmbType.ListIndex <= ITEM_TYPE_POTIONSUBSP) Then Item(EditorIndex).Data1 = frmItemEditor.scrlVitalMod.Value Item(EditorIndex).Data2 = 0 Item(EditorIndex).Data3 = 0 Item(EditorIndex).TwoHanded = 0 End If If (frmItemEditor.cmbType.ListIndex = ITEM_TYPE_SPELL) Then Item(EditorIndex).Data1 = frmItemEditor.scrlSpell.Value Item(EditorIndex).Data2 = 0 Item(EditorIndex).Data3 = 0 Item(EditorIndex).TwoHanded = 0 End If Now, add at the bottom of: If (frmItemEditor.cmbType.ListIndex >= ITEM_TYPE_WEAPON) And (frmItemEditor.cmbType.ListIndex <= ITEM_TYPE_SHIELD) Then After: Item(EditorIndex).Data3 = 0 Add: Item(EditorIndex).TwoHanded = frmItemEditor.chkTwoHanded.Value Ok, now go into modHandleData and find: If (LCase(Parse(0)) = "updateitem") Then Add below the update item section this: Item(n).TwoHanded = 0 Now find: If (LCase(Parse(0)) = "edititem") Then And below: Item(n).Data3 = Val(Parse(7)) Add: Item(n).TwoHanded = Val(Parse(8)) Woot.. Done done done!! Another one of these little things people like in their games :) I just like helping out!! Now, if any of yous have realised, i did the client side first, because i thought i had already done the server side.. Well, i actually did, but forgot i deleted it.. Idiot me.. Anyway, so thats why i got so excited near the end of the server side.. :D Look forward to more tutorials like these.. Adding in simple and easy features that people want desperately in their games!! :D |
|
| Author: | Rian [ Sun May 25, 2008 8:59 pm ] |
| Post subject: | Re: Two Handed Weapon |
Basically, it makes you unable to equip a shield if you're using a two handed weapon. |
|
| Author: | Shadow Dragon [ Tue May 27, 2008 1:26 am ] |
| Post subject: | Re: Two Handed Weapon |
Ok I was looking at it and DarkX was trying to explain without helping me out to much but how would I start to change this so that if the players weaponslot is being used that the shieldslot becomes a weaponslot... I'm lost on that departmet I thought about changing it to look like these Code: Case ITEM_TYPE_WEAPON but I don't think that would work; I'm on vacation in vermonte so I can't test it out myself.
If InvNum <> GetPlayerWeaponSlot(Index) Then If Item(GetPlayerInvItemNum(Index, InvNum)).DualWield < 1 Then If Int(GetPlayerSTR(Index)) < n Then Call PlayerMsg(Index, "Your strength is to low to hold this weapon! Required STR (" & n * 2 & ")", BrightRed) Exit Sub End If Call SetPlayerWeaponSlot(Index, InvNum) Else If GetPlayerShieldSlot(Index) = 0 Then Call SetPlayerWeaponSlot(Index, InvNum) Call SetPlayerShieldSlot(Index, InvNum) Else Call PlayerMsg(Index, "You already have a shield or weapon equipped!", BrightRed) End If End If Else Call SetPlayerWeaponSlot(Index, 0) End If Call SendWornEquipment(Index) Right under that, you will find the Shield sectin of that sub.. Now just change it so it looks like this one: Case ITEM_TYPE_SHIELD If GetPlayerShieldSlot(Index) > 0 Then If GetPlayerWeaponSlot(Index) = GetPlayerShieldSlot(Index) Then Call PlayerMsg(Index, "You have two weapons equipped! Please unequip it before using your shield!", BrightRed) Exit Sub Else Call PlayerMsg(Index, "You already have a shield equipped! Please unequip it before using your shield!", BrightRed) End If Else If InvNum <> GetPlayerShieldSlot(Index) Then Call SetPlayerShieldSlot(Index, InvNum) Else Call SetPlayerShieldSlot(Index, 0) End If Call SendWornEquipment(Index) End If] |
|
| Author: | William [ Tue May 27, 2008 2:21 pm ] |
| Post subject: | Re: Two Handed Weapon |
Code tags please. |
|
| Page 1 of 1 | All times are UTC |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|